package com.sprouting.ops.annotations.invoke;


import com.sprouting.ops.annotations.service.CheckNotNullValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 数据不能为空注解
 * 用于替代默认的 validation 中的空校验注解，原始的JSR303注解存在不能验证 'null' ' ' 等等特殊情况
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2023/3/10 18:02
 */
@Retention(RUNTIME)
@Documented
@Target({METHOD, FIELD, ANNOTATION_TYPE})
@Constraint(validatedBy = CheckNotNullValidator.class)
public @interface CheckNotNull {

    /**
     * 校验不通过的提示信息
     */
    String message() default "非法请求参数";

    /**
     * 分组，有时候只想让该注解在请求或修改的时候触发成功
     * 对应 AddGroup 和 UpdGroup 接口
     */
    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };

    /**
     * 用于打通swagger和 JSR 注解，有了这个注解的就不需要在去 @ApiModelProperty 注解中添加是否必填了，默认就是必填
     * @return
     */
    boolean required() default true;
}
